<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="../公用CSS文件/all.css" />
    <script type="text/javascript" src="../js/jquery.min.js"></script> 	<script type="text/javascript" src="../js/js.js"></script>
    <meta charset="utf-8">
    <style type="text/css">
        table{min-width:80%}
    </style>
</head>
<body>

<div class="dt">mysql合法字符</div>
<ul>

</ul>

<div class="dt">mysql数据库基本操作</div>
<ul>
    <div class="ltable showimg">基本数据库操作指令</div>
    <div class="img">
        <table>
            <tr>
                <th>操作</th><th>说明</th>
            </tr>
            <tr>
                <td>创建数据库</td>
                <td>create database databasename 【charset=utf8】</td>
            </tr>
            <tr>
                <td>查看数据库</td>
                <td>show databases</td>
            </tr>
            <tr>
                <td>选择数据库</td>
                <td>use databasename</td>
            </tr>
            <tr>
                <td>删除数据库</td>
                <td>drop database databasename</td>
            </tr>
            <tr>
                <td>修改数据库信息</td>
                <td>alter database databasename 【charset=gbk】</td>
            </tr>
        </table>
        <li>创建修改数据库除了设置字符集，还可以设置collate排序</li>
        <li>主要的排序规则主要有utf8_general_cs、utf8_general_ci、utf8_unicode_ci等，后缀cs、ci代表区分和不区分大小写。此外unicode比较准确，general速度比较快</li>
    </div>
</ul>

<div class="dt">mysql表的基本操作</div>
<ul>
    <div class="ltable showimg">数据表创建</div>
    <div class="img">
        <image src="img/数据库创建.png"></image>
    </div>

    <div class="ltable showimg">表的基本操作</div>
    <div class="img">
        <table>
            <tr>
                <th>操作</th><th>说明</th>
            </tr>
            <tr>
                <td>查看表结构</td>
                <td>show columns from tablename || describe tablename || desc tablename</td>
            </tr>
            <tr>
                <td>查看表定义信息</td>
                <td>show create table tablename</td>
            </tr>
            <tr>
                <td>删除表</td>
                <td>drop table tablename</td>
            </tr>
            <tr>
                <td>修改表名</td>
                <td>alter table tablename rename newtablename</td>
            </tr>
            <tr>
                <td>增加表字段、字段约束</td>
                <td>alter table tablename add 字段定义/约束语句</td>
            </tr>
            <tr>
                <td>修改字段</td>
                <td>alter table tablename modify 字段 字段信息</td>
            </tr>
            <tr>
                <td>修改字段连同修改字段名</td>
            </tr>
            <tr>
                <td>alter table tablename change 字段 新字段名 字段信息</td>
            </tr>
        </table>
        <li>在作为其他表的外键父表时，表信息的更改、删除可能触发外键机制造成操作失败</li>
    </div>
</ul>

<div class="dt">mysql视图的操作</div>
<ul>

    <div class="ltable showimg">视图的概念</div>
    <div class="img">
        <li>视图是一种特殊的虚拟表，其数据本质上是对其他表的数据的一种引用，在查询视图时动态生成。视图能屏蔽其他数据的干扰将特定联系的数据组织到一起、让数据更加清晰、降低某些操作的复杂性</li>
        <li>视图的建立和删除不会影响基础表，但对其内容操作，其实操作的是基础表的数据</li>
        <li>除了创建视图，视图的其他可用操作和表一致，只是数据库对象关键字table换成了view</li>
    </div>

    <div class="ltable showimg">视图的基本操作</div>
    <div class="img">
        <table>
            <tr>
                <th>操作</th><th>说明</th>
            </tr>
            <tr>
                <td>创建视图</td>
                <td>create view as 查询SQL</td>
            </tr>
            <tr>
                <td>覆盖创建视图</td>
                <td>create or replace view viewname as 查询SQL</td>
            </tr>
            <tr>
                <td>修改视图</td>
                <td>alter view viewname as 查询SQL</td>
            </tr>
            <tr>
                <td>删除视图</td>
                <td>drop view viewname</td>
            </tr>
        </table>
        <li>普通的表并没有create or replace的语法</li>
    </div>
</ul>

<div class="dt">mysql数据操作(curd)</div>
<ul>
    <div class="ltable showimg">curd命令</div>
    <div class="img">
        <table>
            <tr>
                <th>操作</th><th>说明</th>
            </tr>
            <tr>
                <td>插入数据/替换插入</td>
                <td>insert/replace into tablename【(field...)】 values (value...) 【,(value...)】</td>
            </tr>
            <tr>
                <td>更新数据</td>
                <td>update table set field=value 【,field=value】 【where条件】</td>
            </tr>
            <tr>
                <td>删除数据</td>
                <td>delete zidufrom tablename where条件</td>
            </tr>
            <tr>
                <td>查询数据</td>
                <td>select 字段 from tablename where条件 【group by 字段..】 【having条件】【order by字段】【limit offset,listrows】</td>
            </tr>
        </table>
        <li>curd的内涵包括创建（Create）、更新（Update）、读取（Retrieve）和删除（Delete）操作</li>
        <li>插入操作时，如果不指定字段则为所有字段，仅指定部分字段未指定的字段必须可以为null或有默认值</li>
        <li>order by多字段的语法是order by 字段1 asc,字段2 asc，asc顺序desc为倒序，不指定排序方式默认为asc，简写的字段1,字段2 desc，字段1的排序为asc</li>
        <li>mysql的group by分组查询非分组字段的字段如果单一出现且未使用聚合函数会取第一个值而不是报错</li>
    </div>

    <div class="ltable showimg">curd派生命令</div>
    <div class="img">
        <table>
            <tr>
                <th>操作</th><th>说明</th>
            </tr>
            <tr>
                <td>insert select</td>
                <td>insert into tablename【(field...)】 values (select 查询)</td>
            </tr>
        </table>
        <li>insert into和select组合使用，查询的结果必须和要插入的字段数据类型和数量能对上</li>
    </div>
</ul>

<div class="dt">mysql查询条件</div>
<ul>
    <div class="ltable showimg">比较运算符</div>
    <div class="img">
        <table>
            <tr>
                <th>运算符</th><th>标识</th>
            </tr>
            <tr>
                <td> > </td>
                <td>意义同数学比较运算符号></td>
            </tr>
            <tr>
                <td> < </td>
                <td>意义同数学比较运算符号<</td>
            </tr>
            <tr>
                <td> = </td>
                <td>意义同数学运算符号 = </td>
            </tr>
            <tr>
                <td> !=或<> </td>
                <td>意义同数学比较运算符号!=</td>
            </tr>
            <tr>
                <td> >= </td>
                <td>意义同数学比较运算符号>=</td>
            </tr>
            <tr>
                <td> <= </td>
                <td>意义同数学比较运算符号<=</td>
            </tr>
        </table>
        <li>除了查询条件支持通用的数学比较运算，mysql也支持对数据本身进行+、-、*、/(div)、%(mod)等数学运算</li>
    </div>

    <div class="ltable showimg">逻辑运算符</div>
    <div class="img">
        <table>
            <tr>
                <th>运算符</th><th>运算规则</th>
            </tr>
            <tr>
                <td>and或&&</td>
                <td>与运算</td>
            </tr>
            <tr>
                <td>or或||</td>
                <td>或运算</td>
            </tr>
            <tr>
                <td>not或!</td>
                <td>非运算</td>
            </tr>
            <tr>
                <td>xor</td>
                <td>异或运算</td>
            </tr>
        </table>
    </div>

    <div class="ltable showimg">正则表达式</div>
    <div class="img">
        <li>mysql支持正则表达式检索，语法为：字段 regexp '正则'</li>
        <li>mysql正则表达式大体上和PHP一致</li>
    </div>

    <div class="ltable showimg">位运算符</div>
    <div class="img">
        <table>
            <tr>
                <th>运算符</th><th>示范</th><th>说明</th>
            </tr>
            <tr>
                <td> & </td>
                <td> 6 & 11 (结果为2)</td>
                <td>按位进行与运算，将其二进制一一对比(不足位的前增0)，都为1的才为1</td>
            </tr>
            <tr>
                <td> | </td>
                <td> 6 | 11 (结果为15)</td>
                <td>按位进行或运算，二进度对比，只要有1个为1就为1</td>
            </tr>
            <tr>
                <td> ~ </td>
                <td> ~6 (结果为18446744073709551609)</td>
                <td>按位进行非运算，返回与上界值的差，测试是二进制64位最大值与原值的差</td>
            </tr>
            <tr>
                <td> ^ </td>
                <td> 6 ^ 11 (结果为13)</td>
                <td>按位进行异或运算，同位数字仅有1个是1时才是1(任意数和自己进行异或运算都是0)</td>
            </tr>
            <tr>
                <td> << </td>
                <td> 6 << 2 (结果为24)</td>
                <td>按位进行左移运算，右边添加0</td>
            </tr>
            <tr>
                <td> >> </td>
                <td> 6 >> 1 (结果为1)</td>
                <td>按位进行右移运算，删除右边N位</td>
            </tr>
        </table>
    </div>

    <div class="ltable showimg">其他查询关键字</div>
    <div class="img">
        <table>
            <tr>
                <th>关键字</th><th>使用</th><th>说明</th>
            </tr>
            <tr>
                <td>in</td>
                <td>字段 in (value,value...)</td>
                <td>字段的值在value数组之内</td>
            </tr>
            <tr>
                <td>like</td>
                <td>字段 like "value"</td>
                <td>使用模糊检索匹配value，一般组合%、_匹配符使用。%代表任意多任意个字符，_代表任意一个字符</td>
            </tr>
            <tr>
                <td>between and</td>
                <td>字段 between value1 and value2</td>
                <td>区间查询包含边界，查询是否在区间内。等价于字段 >= value1 and 字段 <=value2</td>
            </tr>
            <tr>
                <td>is null</td>
                <td>字段 is null</td>
                <td>字段的值为null，null在mysql是特殊的空值，代表不确定没数据不能使用等于比较</td>
            </tr>
            <tr>
                <td>exists</td>
                <td>where exists(select...)</td>
                <td>子查询，内层的SQL执行有结果时才会执行外层的查询</td>
            </tr>
        </table>
        <li>这些关键字查询都有对应的not反查询，依据英文语法使用即可</li>
    </div>
</ul>

<div class="dt">mysql多表查询</div>
<ul>
    <div class="ltable showimg">并表查询</div>
    <div class="img">
        <table>
            <tr>
                <th>关键字</th><th>意义</th>
            </tr>
            <tr>
                <td>union</td>
                <td>将具有相同字段数目和相同字段类型(宽松)的结果组合到一起</td>
            </tr>
            <tr>
                <td>union all</td>
                <td>将具有相同字段数目和相同字段类型(宽松)的结果组合到一起并去除重复的数据</td>
            </tr>
        </table>
    </div>

    <div class="ltable showimg">连表查询</div>
    <div class="img">
        <table>
            <tr>
                <th>概念</th><th>使用</th><th>说明</th>
            </tr>
            <tr>
                <td>内连接</td>
                <td>select 字段 from table1 inner join table2 on(table)</td>
                <td>内连接将连接双方都匹配的数据拼成一张表</td>
            </tr>
            <tr>
                <td>外连接</td>
                <td>包含左外连接left【outer】join和右外连接right【outer】join</td>
                <td>外连接将双方都匹配的数据和一方不匹配的数据都拼成一张表，特殊的full join是将任意一方匹配的连接在一起</td>
            </tr>
            <tr>
                <td>左外连接</td>
                <td>select 字段 from table1 left join table2 on (条件)</td>
                <td>在进行外间接时以左边的表为参考，将右表的数据拼到左表，如右边无数据则所有字段都为null</td>
            </tr>
            <tr>
                <td>右外连接</td>
                <td>select 字段 from table1 left join table2 on (条件)</td>
                <td>在进行外间接时以右边的表为参考，将左表的数据拼到右表，如左表无数据则所有字段都为null</td>
            </tr>
            <tr>
                <td>自然连接</td>
                <td>select 字段 from table1,table2</td>
                <td>自然连接是直接进行笛卡尔乘积拼表，双方的任意一条数据都相互拼接在一起</td>
            </tr>
        </table>
    </div>

    <div class="ltable showimg">子查询</div>
    <div class="img">
        <table>
            <tr>
                <th>应用场景</th><th>说明</th>
            </tr>
            <tr>
                <td>exists子查询</td>
                <td>子查询返回任意的结果为外部查询提供参考，无结果为not exists</td>
            </tr>
            <tr>
                <td>in子句</td>
                <td>子查询返回一个单列结果集作为in条件</td>
            </tr>
            <tr>
                <td>any子句</td>
                <td>子查询返回的结果同in，any为任意一个一般组合比较运算符使用，=any等价in</td>
            </tr>
            <tr>
                <td>all子句</td>
                <td>子查询返回的结果同in，any为任意一个一般组合比较运算符使用</td>
            </tr>
        </table>
        <li>子查询是嵌套在另一个查询中的查询语句，其为外部的查询提供一个参考，子查询可以在使用表达式的任意位置使用，并在括号内关闭</li>
        <li>子查询语句的运行时先于外部查询，合理的运用是将其结果代入至外部查询，是一个正确的sql那就是合法的子查询，子查询甚至可以直接返回结果拼接到外层查询</li>
    </div>
</ul>

</body>
</html>